#ifndef __EPSILON_3D__OBJECT_H__
#define __EPSILON_3D__OBJECT_H__

#include "../string.h"

namespace Epsilon3D
{
  namespace SceneGraph
  {
    class Object {
    public:
      Object (void) {
        m_uiID = ms_uiNextID++;
      }

      virtual ~Object (void) { };

      unsigned int    GetID         (void) const;
      virtual Object* GetObjectByID (unsigned int id);

      void           SetName (const eString& rkName);
      const eString& GetName (void) const;

      virtual Object* GetObjectByName     (const eString& rkName);
      virtual void    GetAllObjectsByName (const eString& rkName, eTArray<Object *>& rkObjects);

    private:
      eString             m_kName;
      unsigned int        m_uiID;


    public:
      static unsigned int GetNextID (void);

    private:
      static unsigned int ms_uiNextID; ///< Every object ever created will have
                                       ///  its own ID. (Assumes int >= 32-bit)
    };
  }
}

#endif __EPSILON_3D__OBJECT_H__